# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)


# file 文件搜索匹配
# --------------------------------------------------
# file(GLOB <variable> [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS] <globbing-expressions>...)
# file(GLOB_RECURSE <variable> [FOLLOW_SYMLINKS] [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS] <globbing-expressions>...)
# 生成一个与<通配表达式>匹配的文件列表，并将其存储到<变量>中。通配表达式类似于正则表达式。这个命令不会递归搜索。

# 场景1：搜索单个目录的源文件
message(STATUS "==> ${CMAKE_VERSION} 搜索单个目录的源文件")
file(GLOB src_list1 "*.c") # 搜索当前目录下的.c文件
message(STATUS "[USER:TOP]src_list1 : ${src_list1}")
message("")

# 场景2：搜索多个个目录的源文件(非递归)
message(STATUS "==> ${CMAKE_VERSION} 搜索多个目录的源文件(非递归)")
file(GLOB src_list2 
	"*.c" # 搜索当前目录下的.c文件
	"templates/csrc/*.c"
) 
message(STATUS "[USER:TOP]src_list2 : ${src_list2}")
message("")

# 场景3：递归搜索当前目录及子目录所有符合要求的文件
message(STATUS "==> ${CMAKE_VERSION} 递归搜索当前目录及子目录所有符合要求的文件")
file(GLOB_RECURSE src_list3 "*.c") # 搜索当前目录下的.c文件
message(STATUS "[USER:TOP]src_list3 : ${src_list3}")
message("")
